﻿using System;
using System.Collections.Generic;

namespace FeiYang
{
    public enum 特殊挂机_
    {
        无 = 0,
        买药 = 1,
        扔药 = 2,
        捡药 = 3
    }
    public enum 挂机选项_
    {
        无_,
        王城任务 = 1 << 0,
        头目优先 = 1 << 1,
        跟随领队 = 1 << 2,
        固定线路 = 1 << 3,
        边走边打 = 1 << 4,
        存药优先 = 1 << 5,
        已经完成设置 = 1 << 6,
        模拟器已启动 = 1 << 10,
    }
    public class 基本设置_
    {
        public 基本设置_(特殊挂机_ 特殊挂机, 挂机选项_ 挂机选项)
        {
            this.特殊挂机 = 特殊挂机;
            this.挂机选项 = 挂机选项;
        }

        public 特殊挂机_ 特殊挂机 { get; set; }
        public 挂机选项_ 挂机选项 { get; set; }
    }
    public class 技能设置_
    {
        public 技能设置_(string F1, string F2, string F3, string F4, string F5, string F6, string F7, string F8)
        {
            this.数据 = new List<string>();
            this.数据.Add(F1);
            this.数据.Add(F2);
            this.数据.Add(F3);
            this.数据.Add(F4);
            this.数据.Add(F5);
            this.数据.Add(F6);
            this.数据.Add(F7);
            this.数据.Add(F8);
        }
        public List<string> 数据 { get; private set; }
        public override string ToString()
        {
            return String.Join(",", 数据.ToArray());
        }
    }
    public class 购买设置_
    {
        public 购买设置_(string 内容)
        {
            this.内容 = new Dictionary<string, int>();
            var strs = 内容.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (var s in strs)
            {
                var ss = s.Split(new char[] { ':', '：' }, StringSplitOptions.RemoveEmptyEntries);
                var 名称 = ss[0];
                var 数量 = "0";
                if (ss.Length > 1) 数量 = ss[1];
                var k = 正规化物品名称(名称);
                var v = 其他_.尝试编译数字(数量);
                if (!this.内容.ContainsKey(k))
                {
                    this.内容.Add(k, v);
                }
                else
                {
                    其他_.打印("物品设置存在重复项");
                }
            }
        }

        public static void 根据名称判断最大数量(string 名称, ref int 数量)
        {
            数量 = 数量 == 0 ? 1 : 数量;
            if (名称 == "治疗药水")
            {
                数量 = 数量 > 50 ? 50 : 数量;
            }
            else if (名称 == "特级金创药包")
            {
                数量 = 数量 > 30 ? 30 : 数量;
            }
            else if (名称 == "特级魔法药包")
            {
                数量 = 数量 > 20 ? 20 : 数量;
            }
            else if (名称 == "随机神石")
            {
                数量 = 数量 > 4 ? 4 : 数量;
            }
            else
            {
                数量 = 数量 > 2 ? 2 : 数量;
            }
        }
        public static string 正规化物品名称(string 名称)
        {
            名称 = 名称.Trim();
            if (名称 == "特级金创药包" || 名称 == "特级魔法药包")
            {
                return 名称;
            }
            if (名称.Contains("红毒"))
            {
                return "道尊红毒";
            }
            else if (名称.Contains("绿"))
            {
                return "道尊绿毒";
            }
            else if (名称.Contains("红") || 名称.Contains("金疮"))
            {
                return "特级金创药包";
            }
            else if (名称.Contains("蓝") || 名称.Contains("魔法"))
            {
                return "特级魔法药包";
            }
            else if (名称.Contains("治疗") || 名称.Contains("药"))
            {
                return "治疗药水";
            }
            else if (名称.Contains("符"))
            {
                return "道尊神符";
            }
            else if (名称.Contains("水") || 名称.Contains("修"))
            {
                return "冰泉圣水";
            }
            else if (名称.Contains("随机"))
            {
                return "随机神石";
            }
            else if (名称.Contains("回"))
            {
                return "回城石";
            }
            else if (名称.Contains("金条"))
            {
                return "金条";
            }
            else if (名称.Contains("金"))
            {
                return "金砖";
            }
            else if (名称.Contains("雌"))
            {
                return "雌偶";
            }
            else if (名称.Contains("雄"))
            {
                return "雄偶";
            }
            else if (名称.Contains("稻草") || 名称.Contains("人"))
            {
                return "雌偶";
            }
            return "";
        }

        public Dictionary<string, int> 内容 { get; private set; }

        public override string ToString()
        {
            List<string> ss = new List<string>();
            foreach (var vv in this.内容)
            {
                var k = vv.Key;
                var v = vv.Value;
                ss.Add(k + ":" + v);
            }
            return String.Join(",", ss.ToArray());
        }


    }

    public enum 挂机角色_
    {
        左,
        右
    }

    public class 多开器设置_
    {
        public 多开器设置_() { }
        public 多开器设置_(string 名称, int 启动序号, 挂机角色_ 挂机角色, 地图_ 挂机地图, string 二级密码, 基本设置_ 基本设置, 购买设置_ 购买设置, 技能设置_ 技能设置)
        {
            this.名称 = 名称;
            this.启动序号 = 启动序号;
            this.挂机角色 = 挂机角色;
            this.挂机地图 = 挂机地图;
            this.二级密码 = 二级密码;
            this.基本设置 = 基本设置;
            this.购买设置 = 购买设置;
            this.技能设置 = 技能设置;
        }
        public string 名称 { get; set; }
        public int 启动序号 { get; set; }
        public 挂机角色_ 挂机角色 { get; set; }
        public 地图_ 挂机地图 { get; set; }
        public string 二级密码 { get; set; }
        public 基本设置_ 基本设置 { get; set; }
        public 购买设置_ 购买设置 { get; set; }
        public 技能设置_ 技能设置 { get; set; }
    }
}
